package com.scs.application.modules.settlement.dto;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.scs.application.core.model.DataEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import lombok.experimental.Accessors;
import org.hibernate.validator.constraints.Length;

import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.util.Date;
import java.util.List;

/**
 * 记账单实体对象
 */
@Data
@EqualsAndHashCode(callSuper = false)
@ToString(callSuper = true)
@Accessors(chain = true)
public class BillDTO extends DataEntity implements Serializable {


    /** 院方ID */
    private String hospitalId;

    /** 院方名称 */
    private String hospitalName;

    /** 记帐单号 */
    @NotBlank(message="记账单号不能为空")
    private String code;

    /** 供应商ID */
    @NotNull(message="供应商ID不能为空")
    private String supplierId;

    /** 供应商名称 */
    @NotBlank(message="供应商名称不能为空")
    @Length(min=1, max=100, message="供应商名称长度必须介于 1 和 100 之间")
    private String supplierName;

    /** 院方科室代码 */
    @NotBlank(message="院方科室代码不能为空")
    @Length(max=20, message="院方科室代码长度必须介于 0 和 20 之间")
    private String deptCode;

    /** 科室名称 */
    @NotBlank(message="科室名称不能为空")
    @Length(min=1, max=50, message="科室名称长度必须介于 1 和 50 之间")
    private String deptName;

    /** 寄售 */
    /*@NotNull(message="寄售不能为空")
    private Integer isConsignment;*/

    /** 一物一码  */
    @NotNull(message="一物一码 不能为空")
    private Integer isOneThingOneYard;

    /** 记账金额(元) */
   /* @NotNull(message="记账金额不能为空")
    private Double totalAmount;*/

    /** 备注 */
    private String remark;

    // @NotNull(message = "记账时间不能为空")
    private Date gmtBill;

    /** 期号 */
    private String periodNo;

    /** 结算时间 */
    private Date gmtSettlement;

    /** 结算开始时间 */
    private Date gmtSettlementStart;

    /** 结算截止时间 */
    private Date gmtSettlementEnd;

    /** 第三方采购平台供应商Id */
    private String thirdSupplierId;

    /** 第三方采购平台科室Id */
    private String thirdDeptId;

    /** 第三方订单Id */
    private String thirdOrderId;

    @Valid
    @NotNull(message = "记账单明细不能为空")
    @Size(min = 1,message = "记账单明细至少有一条明细")
    private List<BillItemDTO> items;

    @Data
    public static class BillItemDTO {

        /*spd 记账单明细id*/
        private String sourceKey;

        //品类信息 一级品类-二级品类-三级品类
        private String category;

        /** 商品编码 */
        @Length(max=20, message="商品编码长度必须介于 0 和 20 之间")
        private String materialCode;

        /** 商品代码 */
        @Length(max=20, message="商品代码长度必须介于 0 和 20 之间")
        private String materialErpCode;

        /** 品名 */
        @Length(max=100, message="品名长度必须介于 0 和 100 之间")
        private String materialName;

        /** 规格 */
        //@NotBlank(message="规格不能为空")
        //@Length(min=1, max=100, message="规格长度必须介于 1 和 100 之间")
        private String materialSpec;

        /** 价格 */
        @NotNull(message="价格不能为空")
        private Double price;

        /** 单位 */
        @NotBlank(message="单位不能为空")
        @Length(min=1, max=4, message="单位长度必须介于 1 和 4 之间")
        private String unit;

        /** 数量 */
        @NotNull(message="数量不能为空")
        private Double qty;

        /*   *//** 小计(元) *//*
        @NotNull(message="小计(元)不能为空")
        private Double subtotalAmount;
*/
        /** 批次 */
        private String lot;

        /** 供方销售批次 */
        private String saleLot;

        /** 厂商ID */
        @NotBlank(message="厂商ID不能为空")
        private String manufacturerId;

        /** 厂商名称 */
        //@NotBlank(message="厂商名称不能为空")
        //@Length(min=1, max=100, message="厂商名称长度必须介于 1 和 100 之间")
        private String manufacturerName;

        /** 注册证号 */
        private String certificateNo;

        /** hrpKey */
        private String hrpKey;

        /** 阳采代码 */
        private String sunPurchaseCode;

        /** 阳采代码规格Id */
        private String sunPurchaseSpecId;

        /** 第三方订单Id */
        private String thirdOrderItemId;

        /** 生产日期 */
        @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
        private Date mfgDate;

        /** 有效日期 */
        @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
        private Date expDate;

        /** 所属仓库Id */
        private String hrpWarehouseCode;

        /** 所属仓库名称 */
        private String hrpWarehouseName;
    }
}

